// utils/request.js
import { checkTokenValidity } from '../util/util.js';

// 基础路径配置
const BASE_URL = 'http://localhost:8090'; // 替换为你的后端基础地址

export default function request(options) {
  return new Promise((resolve, reject) => {
    const token = uni.getStorageSync('token'); // 从本地存储获取 token
    checkTokenValidity();

    uni.request({
      url: `${BASE_URL}${options.url}`, // 自动拼接基础路径和具体接口路径
      method: options.method || 'GET', // 默认请求方法为 GET
      data: options.data || {}, // 默认空数据
      header: {
        'Content-Type': 'application/json',
        Authorization: token ? `Bearer ${token}` : '', // 自动携带 Token
        ...options.header // 合并自定义请求头
      },
      success: (response) => {
        if (response.statusCode === 200) {
          resolve(response.data); // 返回业务数据
        } else {
          // 处理错误，可能包括业务状态码错误
          uni.showToast({
            title: response.data?.message || '请求失败',
            icon: 'none'
          });
          reject(response);
        }
      },
      fail: (error) => {
        // 网络错误处理
        uni.showToast({
          title: '网络错误，请稍后重试',
          icon: 'none'
        });
        reject(error);
      }
    });
  });
}

// 添加封装的常用方法
export const get = (url, data, header = {}) => {
  return request({ url, method: 'GET', data, header });
};

export const post = (url, data, header = {}) => {
  return request({ url, method: 'POST', data, header });
};

export const put = (url, data, header = {}) => {
  return request({ url, method: 'PUT', data, header });
};

export const del = (url, data, header = {}) => {
  return request({ url, method: 'DELETE', data, header });
};

// 文件上传方法
export const uploadFile = (url, filePath, name = 'file', formData = {}, header = {}) => {
  return new Promise((resolve, reject) => {
    const token = uni.getStorageSync('token'); // 从本地存储获取 token
    checkTokenValidity();

    uni.uploadFile({
      url: `${BASE_URL}${url}`, // 文件上传接口地址
      filePath, // 文件路径
      name, // 文件字段名
      formData, // 其他附加参数
      header: {
        Authorization: token ? `Bearer ${token}` : '', // 自动携带 Token
        ...header // 合并自定义请求头
      },
      success: (response) => {
        const data = JSON.parse(response.data); // uni.uploadFile 返回的 data 是字符串，需要解析
        if (response.statusCode === 200) {
          resolve(data); // 返回业务数据
        } else {
          uni.showToast({
            title: data?.message || '文件上传失败',
            icon: 'none'
          });
          reject(data);
        }
      },
      fail: (error) => {
        // 网络错误处理
        uni.showToast({
          title: '文件上传失败，请稍后重试',
          icon: 'none'
        });
        reject(error);
      }
    });
  });
};
